#include "widget.h"
#include "ui_widget.h"
//#include "ocr.h"
#include "aip-cpp-sdk-4.16.4/ocr.h"
#include <QTimer>//包含QTimer头文件
#include <openssl/evp.h>
#include <QDebug>


// 设置APPID/AK/SK
std::string app_id="31615689";
std::string api_key = "nHX8y8aUaigUMOo8ygFkd0mu";
std::string secret_key = "GoSGahWZ99zi7pTwvPircMHPR0PdzQrz";
aip::Ocr client(app_id, api_key, secret_key);

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    InitCamara();
    connect(&timer,SIGNAL(timeout()),this,SLOT(ReadFarme()));

}

void Widget::InitCamara()
{
    //这句代码的意思是打开video4，括号中的參数仅仅要有:

    // 0 , -1, 202 但要依据你自己的情况改,实測204可以成功打开
    camera = cvCreateCameraCapture(-1);
    if (!camera) {
        qDebug() << "Failed to open camera!";
    }
    timer.start(50); //启动定时器，1000为1S ，50为50ms，超时则发出timeoout信号
}


std::string GetPLateNumber(std::string PicturePath)
{
    Json::Value result;
//    std::string image; aip::get_file_content("./PlateNumber.jpg", &image);
    std::string image;
    aip::get_file_content(PicturePath.c_str(), &image);

    // 调用车牌识别
//    result = client.license_plate(image, aip::null);
//     如果有可选参数
    std::map<std::string, std::string> options;
    options["multi_detect"] = "true";
//    // 带参数调用车牌识别
    result = client.license_plate(image, options);


    QString meg = result.toStyledString().data();
    meg.remove(0, meg.indexOf("number\""));
    meg.remove(meg.indexOf("}"), meg.length());

    qDebug() << meg;

    if(result["error_code"].isNull())
    {

          return (result["words_result"][0]["number"].asString() + ",欢迎光临.");
    }
    else
    {
        return ("识别失败");
    }
        return ("识别失败");
}




void Widget::on_pushButton_clicked()
{
    std::string PlateNumber ;
//    int Ret;
    frame = cvQueryFrame(camera);
    //将图片格式转换成QImage格式，否则不能再lable上显示
    imag = QImage((const uchar*)frame->imageData,
    frame->width,
    frame->height,
    QImage::Format_RGB888).rgbSwapped();

    matFrame = cv::cvarrToMat(frame);  // 转换为 cv::Mat

    cv::imwrite("./image.jpg", matFrame);

    //保存图片到本地
//    imag.save("/home/debian/PlateNumber.jpg", "JPG", 100);
    //把拍下来的照片传递给百度AI接口获取车牌号
    PlateNumber = GetPLateNumber("./image.jpg");

    qDebug() << QString::fromStdString(PlateNumber);
    //设置图片的大小等于label的大小
    imag.scaled(ui->picture->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui->picture->setScaledContents(true);
    //用label显示一张图片
    ui->picture->setPixmap(QPixmap::fromImage(imag));
    //把接口返回来的数据显示到屏幕上
    ui->textBrowser->setText(QString::fromStdString(PlateNumber));
}


Widget::~Widget()
{
    delete ui;
}

void Widget::ReadFarme()
{

    //从摄像头读取一张图片
    //这个函数cvQueryFrame作用是从摄像头或者文件中抓取一帧
    //参数为视频获取结构也就是我在初始化摄像头声明的CvCapture *camera;
    frame = cvQueryFrame(camera);
    //将图片格式转换成QImage格式，否则不能再lable上显示
    imag = QImage((const uchar*)frame->imageData,
    frame->width,
    frame->height,
    QImage::Format_RGB888).rgbSwapped();
//    //用label显示一张图片
//    //设置图片的大小等于label的大小
    imag.scaled(ui->camera->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui->camera->setScaledContents(true);
    ui->camera->setPixmap(QPixmap::fromImage(imag));

}
